library(janitor)
##
## Attaching package: 'janitor'
## The following objects are masked from 'package:stats':
##
## chisq.test, fisher.test
library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr 1.1.4 ✔ readr 2.1.5
## ✔ forcats 1.0.0 ✔ stringr 1.5.1
## ✔ ggplot2 3.5.1 ✔ tibble 3.2.1
## ✔ lubridate 1.9.4 ✔ tidyr 1.3.1
## ✔ purrr 1.0.2
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag() masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(ggplot2)
library(gridExtra)
##
## Attaching package: 'gridExtra'
##
## The following object is masked from 'package:dplyr':
##
## combine
library(VIM)
## Loading required package: colorspace
## Loading required package: grid
## VIM is ready to use.
##
## Suggestions and bug-reports can be submitted at: https://github.com/statistikat/VIM/issues
##
## Attaching package: 'VIM'
##
## The following object is masked from 'package:datasets':
##
## sleep
library(corrplot) # for corrplot
## corrplot 0.95 loaded
library(GGally) # for ggpairs
## Registered S3 method overwritten by 'GGally':
## method from
## +.gg ggplot2
library(tidyr) # for gather
library(dplyr) # for glimpse
options(encoding = "UTF-8")
data <- read.csv("data/diabetes_012_health_indicators_BRFSS2015.csv", na=c("", "NA", "N/A")) |> clean_names()
glimpse(data)
## Rows: 253,680
## Columns: 22
## $ diabetes_012 <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 2, 0, 0,…
## $ high_bp <dbl> 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 1,…
## $ high_chol <dbl> 1, 0, 1, 0, 1, 1, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0,…
## $ chol_check <dbl> 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,…
## $ bmi <dbl> 40, 25, 28, 27, 24, 25, 30, 25, 30, 24, 25, 34,…
## $ smoker <dbl> 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 0,…
## $ stroke <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,…
## $ heart_diseaseor_attack <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,…
## $ phys_activity <dbl> 0, 1, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, 1, 1,…
## $ fruits <dbl> 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0,…
## $ veggies <dbl> 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0,…
## $ hvy_alcohol_consump <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,…
## $ any_healthcare <dbl> 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,…
## $ no_docbc_cost <dbl> 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,…
## $ gen_hlth <dbl> 5, 3, 5, 2, 2, 2, 3, 3, 5, 2, 3, 3, 3, 4, 4, 2,…
## $ ment_hlth <dbl> 18, 0, 30, 0, 3, 0, 0, 0, 30, 0, 0, 0, 0, 0, 30…
## $ phys_hlth <dbl> 15, 0, 30, 0, 0, 2, 14, 0, 30, 0, 0, 30, 15, 0,…
## $ diff_walk <dbl> 1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0, 0,…
## $ sex <dbl> 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0,…
## $ age <dbl> 9, 7, 9, 11, 11, 10, 9, 11, 9, 8, 13, 10, 7, 11…
## $ education <dbl> 4, 6, 4, 3, 5, 6, 6, 4, 5, 4, 6, 5, 5, 4, 6, 6,…
## $ income <dbl> 3, 1, 8, 6, 4, 8, 7, 4, 1, 3, 8, 1, 7, 6, 2, 8,…
aggr(data, ylab = c("Proportion of missings", "Pattern"), number = TRUE,
cex.axis = 0.6, cex.numbers = 0.5)
Ta thấy được rằng không có bất cứ cột nào có dữ liệu bị khuyết.
Tổng cộng có 22 cột, và tất cả các cột đều ở định dạng
<dbl>, nghĩa là định dạng số, chúng ta sẽ cùng xem
xét xem biến nào là biến định lượng và biến nào là biến định tính
unique_counts <- data.frame(
variable = names(data),
unique_count = sapply(data, function(x) length(unique(x)))
)
print(unique_counts)
## variable unique_count
## diabetes_012 diabetes_012 3
## high_bp high_bp 2
## high_chol high_chol 2
## chol_check chol_check 2
## bmi bmi 84
## smoker smoker 2
## stroke stroke 2
## heart_diseaseor_attack heart_diseaseor_attack 2
## phys_activity phys_activity 2
## fruits fruits 2
## veggies veggies 2
## hvy_alcohol_consump hvy_alcohol_consump 2
## any_healthcare any_healthcare 2
## no_docbc_cost no_docbc_cost 2
## gen_hlth gen_hlth 5
## ment_hlth ment_hlth 31
## phys_hlth phys_hlth 31
## diff_walk diff_walk 2
## sex sex 2
## age age 13
## education education 6
## income income 8
Theo như chi tiết về bộ dữ liệu, thì ta có tất cả là biến định tính,
chỉ có bmi, ment_hlth, phys_hlth
là biến định lượng.
qualitative_vars <- unique_counts |> filter(unique_count <= 13)
qualitative_vars = qualitative_vars$variable
quantitative_vars <- c("bmi", "ment_hlth", "phys_hlth")
print(qualitative_vars)
## [1] "diabetes_012" "high_bp" "high_chol"
## [4] "chol_check" "smoker" "stroke"
## [7] "heart_diseaseor_attack" "phys_activity" "fruits"
## [10] "veggies" "hvy_alcohol_consump" "any_healthcare"
## [13] "no_docbc_cost" "gen_hlth" "diff_walk"
## [16] "sex" "age" "education"
## [19] "income"
print(quantitative_vars)
## [1] "bmi" "ment_hlth" "phys_hlth"
# Convert qualitative variables to factors
data[qualitative_vars] <- lapply(data[qualitative_vars], as.factor)
plots <- lapply(quantitative_vars, function(var) {
ggplot(data = data, aes(x = !!sym(var))) +
geom_histogram(fill = "white", color = "black", binwidth = 1) +
ggtitle(paste("Histogram of", var))
})
do.call(grid.arrange, c(plots, ncol = 1))
ment_hlth và phys_hlth tập trung ở 0 rất
nhiều, tiếp theo là 30. Các giá trị còn lại rất ítTiếp theo ta tính toán các thống kê mô tả cho các biến định lượng:
summary_stats <- data |>
summarise(across(all_of(quantitative_vars), list(
mean = ~mean(.),
median = ~median(.),
sd = ~sd(.),
max = ~max(.),
min = ~min(.)
), .names = "{col}_{fn}"))
summary_stats_t <- as.data.frame(t(summary_stats))
print(summary_stats_t)
## V1
## bmi_mean 28.382364
## bmi_median 27.000000
## bmi_sd 6.608694
## bmi_max 98.000000
## bmi_min 12.000000
## ment_hlth_mean 3.184772
## ment_hlth_median 0.000000
## ment_hlth_sd 7.412847
## ment_hlth_max 30.000000
## ment_hlth_min 0.000000
## phys_hlth_mean 4.242081
## phys_hlth_median 0.000000
## phys_hlth_sd 8.717951
## phys_hlth_max 30.000000
## phys_hlth_min 0.000000
plot_var = qualitative_vars[1]
ggplot(data = data, aes_string(x = plot_var, fill = plot_var)) +
geom_bar() +
ggtitle(paste("Bar Chart of", plot_var)) +
theme(legend.position = "none")
## Warning: `aes_string()` was deprecated in ggplot2 3.0.0.
## ℹ Please use tidy evaluation idioms with `aes()`.
## ℹ See also `vignette("ggplot2-in-packages")` for more information.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
Bộ dữ liệu này, số điểm quan sát không bị mắc bệnh tiểu đường là nhiều nhất, tiếp theo là đã bị tiểu đường ít nhất là tiền tiểu đường. Sự chênh lệch lớn giữa nhóm không mắc bệnh (0) và hai nhóm mắc bệnh (1 và 2) có thể gây mất cân bằng dữ liệu. Điều này có thể cần được xử lý nếu áp dụng các mô hình phân tích hoặc học máy để đảm bảo độ chính xác cao hơn.
plot_var = qualitative_vars[2]
ggplot(data = data, aes_string(x = plot_var, fill = plot_var)) +
geom_bar() +
ggtitle(paste("Bar Chart of", plot_var)) +
theme(legend.position = "none")
Ta có các quan sát mắc tình trạng cao huyết áp ít hơn các quan sát bình thường, chênh lệch khoảng 30.000-40.000 người
plot_var = qualitative_vars[3]
ggplot(data = data, aes_string(x = plot_var, fill = plot_var)) +
geom_bar() +
ggtitle(paste("Bar Chart of", plot_var)) +
theme(legend.position = "none")
Tương tự tình trạng cholesterol cao cũng vậy
plot_var = qualitative_vars[4]
ggplot(data = data, aes_string(x = plot_var, fill = plot_var)) +
geom_bar() +
ggtitle(paste("Bar Chart of", plot_var)) +
theme(legend.position = "none")
Ta thấy được các quan sát đa số đã kiểm tra cholesterol trong 5 năm. Một số rất ít là vẫn chưa kiểm tra
plot_var = qualitative_vars[5]
ggplot(data = data, aes_string(x = plot_var, fill = plot_var)) +
geom_bar() +
ggtitle(paste("Bar Chart of", plot_var)) +
theme(legend.position = "none")
Tỉ lệ người hút nhiều thuốc cao hơn tỉ lệ người ít hút thuốc hơn.
plot_var = qualitative_vars[6]
ggplot(data = data, aes_string(x = plot_var, fill = plot_var)) +
geom_bar() +
ggtitle(paste("Bar Chart of", plot_var)) +
theme(legend.position = "none")
Đa số các quan sát đều chưa từng bị đột quỵ
plot_var = qualitative_vars[7]
ggplot(data = data, aes_string(x = plot_var, fill = plot_var)) +
geom_bar() +
ggtitle(paste("Bar Chart of", plot_var)) +
theme(legend.position = "none")
Đa số các quan sát không bị bệnh tim mạch vành (CHD) hoặc nhồi máu cơ tim (MI)
plot_var = qualitative_vars[8]
ggplot(data = data, aes_string(x = plot_var, fill = plot_var)) +
geom_bar() +
ggtitle(paste("Bar Chart of", plot_var)) +
theme(legend.position = "none")
Các quan sát rất tích cực hoạt động thể chất trong vòng 30 ngày, và khoảng hơn 1/5 quan sát không thực hiện việc đó.
plot_var = qualitative_vars[9]
ggplot(data = data, aes_string(x = plot_var, fill = plot_var)) +
geom_bar() +
ggtitle(paste("Bar Chart of", plot_var)) +
theme(legend.position = "none")
Số người ăn trái cây ít nhất một ngày gần gấp đôi số người không.
plot_var = qualitative_vars[10]
ggplot(data = data, aes_string(x = plot_var, fill = plot_var)) +
geom_bar() +
ggtitle(paste("Bar Chart of", plot_var)) +
theme(legend.position = "none")
Đối với việc ăn rau củ quả mỗi ngày thì các quan sát có thực hiện việc đó rất nhiều chiếm hơn 4/5 toàn bộ quan sát
plot_var = qualitative_vars[11]
ggplot(data = data, aes_string(x = plot_var, fill = plot_var)) +
geom_bar() +
ggtitle(paste("Bar Chart of", plot_var)) +
theme(legend.position = "none")
Đa số các quan sát đều không uống nhiều rượu
plot_var = qualitative_vars[12]
ggplot(data = data, aes_string(x = plot_var, fill = plot_var)) +
geom_bar() +
ggtitle(paste("Bar Chart of", plot_var)) +
theme(legend.position = "none")
Đa số các quan sát đều đã có tiếp cận các dịch vụ sức khỏe
plot_var = qualitative_vars[13]
ggplot(data = data, aes_string(x = plot_var, fill = plot_var)) +
geom_bar() +
ggtitle(paste("Bar Chart of", plot_var)) +
theme(legend.position = "none")
Có một số ít quan sát (khoảng dưới 50.000) không có gặp bác sĩ trong vòng 12 tháng vì không có kinh phí.
plot_var = qualitative_vars[14]
ggplot(data = data, aes_string(x = plot_var, fill = plot_var)) +
geom_bar() +
ggtitle(paste("Bar Chart of", plot_var)) +
theme(legend.position = "none")
Đa số các tình trạng sức khỏe chung của quan sát đều ở mức
Very Good và Good.
plot_var = qualitative_vars[15]
ggplot(data = data, aes_string(x = plot_var, fill = plot_var)) +
geom_bar() +
ggtitle(paste("Bar Chart of", plot_var)) +
theme(legend.position = "none")
Có khoảng gần 50.000 quan sát gặp tình trạng khó khăn trong đi lại
plot_var = qualitative_vars[16]
ggplot(data = data, aes_string(x = plot_var, fill = plot_var)) +
geom_bar() +
ggtitle(paste("Bar Chart of", plot_var)) +
theme(legend.position = "none")
Lấy mẫu theo giới tính khá là đồng đều, không có sự chênh lệch lớn
plot_var = qualitative_vars[17]
ggplot(data = data, aes_string(x = plot_var, fill = plot_var)) +
geom_bar() +
ggtitle(paste("Bar Chart of", plot_var)) +
theme(legend.position = "none")
Số lượng người tăng dần từ nhóm 1 đến nhóm 10, đạt đỉnh tại nhóm tuổi 10. Sau nhóm 10, số lượng người bắt đầu giảm dần ở các nhóm 11, 12, và 13.
Nhóm tuổi 10 có số lượng người cao nhất trong dataset. Các nhóm tuổi từ 1 đến 5 có số lượng người tham gia thấp hơn so với các nhóm từ 6 đến 10, cho thấy nhóm trung niên hoặc lớn tuổi chiếm tỷ lệ cao hơn.
plot_var = qualitative_vars[18]
ggplot(data = data, aes_string(x = plot_var, fill = plot_var)) +
geom_bar() +
ggtitle(paste("Bar Chart of", plot_var)) +
theme(legend.position = "none")
Biểu đồ cho thấy số lượng người tham gia tăng dần theo trình độ học vấn, với các nhóm giáo dục từ 1 đến 6. - Nhóm 6 (học vấn cao nhất) có số lượng người tham gia cao nhất, vượt trội hơn hẳn so với các nhóm khác. - Nhóm 1 (học vấn thấp nhất) có số lượng người tham gia thấp nhất, gần như không đáng kể. - Nhóm 4, 5, và 6 chiếm đa số, điều này có thể cho thấy rằng phần lớn người tham gia có trình độ học vấn từ trung học phổ thông trở lên.
plot_var = qualitative_vars[19]
ggplot(data = data, aes_string(x = plot_var, fill = plot_var)) +
geom_bar() +
ggtitle(paste("Bar Chart of", plot_var)) +
theme(legend.position = "none")
summary(data$bmi)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 12.00 24.00 27.00 28.38 31.00 98.00
ggplot(data = data, aes(x = bmi)) +
geom_histogram(aes(y = ..density..), binwidth = 1, fill = "lightblue", color = "black", bins = 30) +
geom_density(color = "blue", bw = "nrd0", kernel = "gaussian") +
geom_rug() +
labs(title = "BMI Distribution with Density", x = "BMI", y = "Density") +
theme_minimal() +
theme(plot.title = element_text(hjust = 0.5)) +
geom_vline(aes(xintercept = mean(bmi)), color = "red", linetype = "dashed", size = 1)
## Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
## ℹ Please use `linewidth` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
## Warning: The dot-dot notation (`..density..`) was deprecated in ggplot2 3.4.0.
## ℹ Please use `after_stat(density)` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
ggplot(data = data, aes(x = "", y = bmi)) +
geom_boxplot(fill = "lightblue", color = "black") +
labs(title = "Boxplot of BMI", x = "BMI", y = "Diabetes") +
theme_minimal() +
theme(plot.title = element_text(hjust = 0.5)) +
geom_hline(aes(yintercept = mean(bmi)), color = "red", linetype = "dashed", size = 1)
ggplot(data = data, aes(sample = bmi)) +
stat_qq() +
stat_qq_line() +
labs(title = "QQ Plot of BMI", x = "Theoretical Quantiles", y = "Sample Quantiles") +
theme_minimal() +
theme(plot.title = element_text(hjust = 0.5))
#### 1. Tổng quan qua các chỉ số thống kê
Độ chênh lệch giữa Mean (28.38) và Median (27) (~1.4 đơn vị) không quá lớn, nhưng phần đuôi phải (right tail) rất dài và “đậm đặc outlier” (thể hiện rõ ở Boxplot) khiến phân phối trở nên mất đối xứng.
Quan sát QQ plot, ta thấy: 1. Khúc giữa: Dữ liệu ở
dải giữa (khoảng 20–35) cong lên, sau đó “bẻ cong” mạnh ra khỏi đường
chéo lý thuyết.
2. Phần đuôi dưới (BMI rất thấp) nằm phía
trên đường lý thuyết ⇒ tail trái không quá dài (và có thể có
một vài outlier thấp ~12).
3. Phần đuôi trên (BMI rất cao) vượt
hẳn lên khỏi đường chuẩn, cho thấy sự phình to
của đuôi phải ⇒ nặng outlier bên phải.
Tổng thể, QQ plot xác nhận BMI không tuân theo phân phối chuẩn (normal distribution), mà lệch phải rất rõ.
summary(data$ment_hlth)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.000 0.000 0.000 3.185 2.000 30.000
ggplot(data = data, aes(x = ment_hlth)) +
geom_bar(fill = "blue", color = "black") +
labs(title = "Mental Health Distribution", x = "Mental Health", y = "Frequency") +
theme_minimal() +
theme(plot.title = element_text(hjust = 0.5))
ggplot(data = data, aes(x = "", y = ment_hlth)) +
geom_boxplot(fill = "lightblue", color = "black") +
labs(title = "Boxplot of Mental Health", x = "", y = "Mental Health") +
theme_minimal() +
theme(plot.title = element_text(hjust = 0.5)) +
geom_hline(aes(yintercept = mean(ment_hlth)), color = "red", linetype = "dashed", size = 1)
ggplot(data = data, aes(sample = ment_hlth)) +
stat_qq() +
stat_qq_line() +
labs(title = "QQ Plot of Mental Health", x = "Theoretical Quantiles", y = "Sample Quantiles") +
theme_minimal() +
theme(plot.title = element_text(hjust = 0.5))
Như vậy, đa số mẫu nằm ở 0 (không ngày gặp vấn đề), còn một nhóm nhỏ có giá trị rất cao (tới 30 ngày).
Q3 + 1.5*IQR = 2 + 1.5*2 = 5. Vậy nên bất cứ giá trị > 5
đều bị xem là outlier theo định nghĩa boxplot.summary(data$phys_hlth)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.000 0.000 0.000 4.242 3.000 30.000
ggplot(data = data, aes(x = phys_hlth)) +
geom_bar(fill = "blue", color = "black") +
labs(title = "Physical Health Distribution", x = "Physical Health", y = "Frequency") +
theme_minimal() +
theme(plot.title = element_text(hjust = 0.5))
ggplot(data = data, aes(x = "", y = phys_hlth)) +
geom_boxplot(fill = "lightblue", color = "black") +
labs(title = "Boxplot of Physical Health", x = "", y = "Physical Health") +
theme_minimal() +
theme(plot.title = element_text(hjust = 0.5)) +
geom_hline(aes(yintercept = mean(phys_hlth)), color = "red", linetype = "dashed", size = 1)
ggplot(data = data, aes(sample = phys_hlth)) +
stat_qq() +
stat_qq_line() +
labs(title = "QQ Plot of Physical Health", x = "Theoretical Quantiles", y = "Sample Quantiles") +
theme_minimal() +
theme(plot.title = element_text(hjust = 0.5))
quantitative_data <- data.frame(
BMI = data$bmi,
MentHlth = data$ment_hlth,
PhysHlth = data$phys_hlth
)
quantitative_data <- na.omit(quantitative_data)
ggplot(quantitative_data, aes(x = factor(round(MentHlth/5)*5), y = BMI)) +
geom_boxplot(fill = "lightblue") +
labs(title = "Boxplot of BMI by MentHlth", x = "MentHlth (binned)", y = "BMI") +
theme_minimal()
ggplot(quantitative_data, aes(x = factor(round(PhysHlth/5)*5), y = BMI)) +
geom_boxplot(fill = "lightblue") +
labs(title = "Boxplot of BMI by PhysHlth", x = "PhysHlth (binned)", y = "BMI") +
theme_minimal()
ggplot(quantitative_data, aes(x = factor(round(MentHlth/5)*5), y = PhysHlth)) +
geom_boxplot(fill = "lightblue") +
labs(title = "Boxplot of PhysHlth by MentHlth", x = "MentHlth (binned)", y = "PhysHlth") +
theme_minimal()
ggplot(quantitative_data, aes(x = factor(round(MentHlth/5)*5), y = BMI)) +
geom_violin(fill = "lightgreen") +
labs(title = "Violin Plot of BMI by MentHlth", x = "MentHlth (binned)", y = "BMI") +
theme_minimal()
ggplot(quantitative_data, aes(x = factor(round(PhysHlth/5)*5), y = BMI)) +
geom_violin(fill = "lightgreen") +
labs(title = "Violin Plot of BMI by PhysHlth", x = "PhysHlth (binned)", y = "BMI") +
theme_minimal()
ggplot(quantitative_data, aes(x = factor(round(MentHlth/5)*5), y = PhysHlth)) +
geom_violin(fill = "lightgreen") +
labs(title = "Violin Plot of PhysHlth by MentHlth", x = "MentHlth (binned)", y = "PhysHlth") +
theme_minimal()
ggplot(quantitative_data, aes(x = MentHlth, y = BMI)) +
geom_point(alpha = 0.6, color = "blue") +
geom_smooth(method = "lm", color = "red") +
labs(title = "Scatter Plot of BMI and MentHlth", x = "MentHlth", y = "BMI") +
theme_minimal()
## `geom_smooth()` using formula = 'y ~ x'
ggplot(quantitative_data, aes(x = PhysHlth, y = BMI)) +
geom_point(alpha = 0.6, color = "blue") +
geom_smooth(method = "lm", color = "red") +
labs(title = "Scatter Plot of BMI and PhysHlth", x = "PhysHlth", y = "BMI") +
theme_minimal()
## `geom_smooth()` using formula = 'y ~ x'
ggplot(quantitative_data, aes(x = MentHlth, y = PhysHlth)) +
geom_point(alpha = 0.6, color = "blue") +
geom_smooth(method = "lm", color = "red") +
labs(title = "Scatter Plot of PhysHlth and MentHlth", x = "MentHlth", y = "PhysHlth") +
theme_minimal()
## `geom_smooth()` using formula = 'y ~ x'
Từ đó, có vẻ không có mối liên hệ mạnh giữa “số ngày sức khỏe tinh thần/thể chất kém” với chỉ số BMI. Nói cách khác, ở mọi mức MentHlth/PhysHlth, ta đều gặp đủ loại BMI từ thấp (15–20) đến rất cao (70–100).
BMI hầu như không tương quan mạnh với MentHlth hay PhysHlth; mọi nhóm ngày “kém” vẫn có “bình quân” BMI khá tương đồng.
MentHlth và PhysHlth dường như có mối liên hệ đồng biến: khi số ngày gặp vấn đề về tinh thần tăng, thì số ngày thể chất kém cũng tăng.
Từ đó, trong các bước phân tích hoặc xây dựng mô hình, ta có thể:
cor.test(quantitative_data$MentHlth, quantitative_data$PhysHlth, method = "spearman")
## Warning in cor.test.default(quantitative_data$MentHlth,
## quantitative_data$PhysHlth, : Cannot compute exact p-value with ties
##
## Spearman's rank correlation rho
##
## data: quantitative_data$MentHlth and quantitative_data$PhysHlth
## S = 1.8827e+15, p-value < 2.2e-16
## alternative hypothesis: true rho is not equal to 0
## sample estimates:
## rho
## 0.3080503
quantitative_data <- data.frame(
BMI = data$bmi,
MentHlth = data$ment_hlth,
PhysHlth = data$phys_hlth,
Diabetes_012 = factor(data$diabetes_012)
)
quantitative_data <- na.omit(quantitative_data)
ggplot(quantitative_data, aes(x = Diabetes_012, y = BMI, fill = Diabetes_012)) +
geom_boxplot() +
labs(title = "Boxplot of BMI by Diabetes_012", x = "Diabetes Status", y = "BMI") +
theme_minimal()
ggplot(quantitative_data, aes(x = Diabetes_012, y = MentHlth, fill = Diabetes_012)) +
geom_boxplot() +
labs(title = "Boxplot of MentHlth by Diabetes_012", x = "Diabetes Status", y = "MentHlth") +
theme_minimal()
ggplot(quantitative_data, aes(x = Diabetes_012, y = PhysHlth, fill = Diabetes_012)) +
geom_boxplot() +
labs(title = "Boxplot of PhysHlth by Diabetes_012", x = "Diabetes Status", y = "PhysHlth") +
theme_minimal()
ggplot(quantitative_data, aes(x = Diabetes_012, y = MentHlth, fill = Diabetes_012)) +
geom_violin() +
labs(title = "Violin Plot of MentHlth by Diabetes_012", x = "Diabetes Status", y = "MentHlth") +
theme_minimal()
ggplot(quantitative_data, aes(x = Diabetes_012, y = PhysHlth, fill = Diabetes_012)) +
geom_violin() +
labs(title = "Violin Plot of PhysHlth by Diabetes_012", x = "Diabetes Status", y = "PhysHlth") +
theme_minimal()
ggplot(quantitative_data, aes(x = Diabetes_012, y = BMI, fill = Diabetes_012)) +
geom_violin() +
labs(title = "Violin Plot of BMI by Diabetes_012", x = "Diabetes Status", y = "BMI") +
theme_minimal()
ggplot(quantitative_data, aes(x = MentHlth, y = BMI, color = Diabetes_012)) +
geom_point(alpha = 0.6) +
geom_smooth(method = "lm", se = FALSE) +
labs(title = "Scatter Plot of BMI vs MentHlth by Diabetes_012", x = "MentHlth", y = "BMI") +
theme_minimal()
## `geom_smooth()` using formula = 'y ~ x'
ggplot(quantitative_data, aes(x = PhysHlth, y = BMI, color = Diabetes_012)) +
geom_point(alpha = 0.6) +
geom_smooth(method = "lm", se = FALSE) +
labs(title = "Scatter Plot of BMI vs PhysHlth by Diabetes_012", x = "PhysHlth", y = "BMI") +
theme_minimal()
## `geom_smooth()` using formula = 'y ~ x'
ggplot(quantitative_data, aes(x = MentHlth, y = PhysHlth, color = Diabetes_012)) +
geom_point(alpha = 0.6) +
geom_smooth(method = "lm", se = FALSE) +
labs(title = "Scatter Plot of MentHlth vs PhysHlth by Diabetes_012", x = "MentHlth", y = "PhysHlth") +
theme_minimal()
## `geom_smooth()` using formula = 'y ~ x'
Quan sát này phù hợp với hiểu biết y khoa: người tiền tiểu đường / tiểu đường thường có BMI cao hơn trung bình so với người không mắc. Dù vậy, phân phối BMI vẫn có độ trải rộng lớn trong từng nhóm.
Vậy, số ngày tinh thần kém (MentHlth) không tỏ ra khác biệt lớn giữa ba nhóm tiểu đường. Nếu có, có thể là rất nhẹ và cần kiểm định thống kê (như Kruskal–Wallis) để xác nhận.
Qua đó, có vẻ nhóm tiểu đường (2) và nhóm tiền tiểu đường (1) có xu hướng gặp nhiều ngày sức khỏe thể chất kém hơn nhóm không tiểu đường (0). Sự khác biệt này khá trực quan trên boxplot, cho thấy tần suất ngày ốm cao hơn ở người tiền tiểu đường và tiểu đường.
Tất cả điều này giúp ta hiểu rõ hơn về đặc trưng của mỗi nhóm và có cơ sở để xây dựng mô hình phân loại (chẳng hạn Random Forest, Logistic Regression, v.v.) với BMI và PhysHlth (và các biến khác) là predictor quan trọng.
# Tạo tần suất của các nhóm
freq_data <- as.data.frame(table(data$high_bp, data$diabetes_012))
colnames(freq_data) <- c("high_bp", "diabetes_012", "frequency")
# Chuyển đổi cột thành kiểu số
freq_data$high_bp <- as.factor(freq_data$high_bp)
freq_data$diabetes_012 <- as.factor(freq_data$diabetes_012)
# Vẽ biểu đồ
ggplot(freq_data, aes(x = high_bp, y = frequency, fill = diabetes_012)) +
geom_bar(stat = "identity", position = "dodge", width = 0.7) +
geom_text(aes(label = frequency),
position = position_dodge(width = 0.7),
vjust = -0.5,
size = 3) +
labs(
title = "Diabetes Frequency by High Blood Pressure Status",
x = "High Blood Pressure",
y = "Frequency",
fill = "Diabetes Status"
) +
scale_fill_manual(
values = c("red", "blue", "green"),
labels = c("No Diabetes", "Pre-Diabetes", "Diabetes")
) +
theme_bw() +
theme(
plot.title = element_text(size = 16, face = "bold", hjust = 0.5),
axis.title = element_text(size = 14),
axis.text = element_text(size = 12),
legend.title = element_text(size = 14),
legend.text = element_text(size = 12)
)
Huyết áp không cao (0): - Phần lớn thuộc nhóm Không tiểu đường (134,391). - Nhóm Tiền tiểu đường (1,718) và Tiểu đường (8,742) thấp hơn rất nhiều.
Huyết áp cao (1): - Không tiểu đường vẫn chiếm đa số (79,312). - Số ca Tiền tiểu đường (2,913) và Tiểu đường (26,604) tăng đáng kể so với huyết áp không cao.
Nhận xét: Huyết áp cao có liên quan đến tần suất cao hơn của trạng thái Tiểu đường so với huyết áp bình thường.
# Tạo tần suất của các nhóm
freq_data <- as.data.frame(table(data$high_chol, data$diabetes_012))
colnames(freq_data) <- c("high_chol", "diabetes_012", "frequency")
# Chuyển đổi cột thành kiểu số
freq_data$high_chol <- as.factor(freq_data$high_chol)
freq_data$diabetes_012 <- as.factor(freq_data$diabetes_012)
# Vẽ biểu đồ
ggplot(freq_data, aes(x = high_chol, y = frequency, fill = diabetes_012)) +
geom_bar(stat = "identity", position = "dodge", width = 0.7) +
geom_text(aes(label = frequency),
position = position_dodge(width = 0.7),
vjust = -0.5,
size = 3) +
labs(
title = "Diabetes Frequency by High Cholesterol Status",
x = "High Cholesterol",
y = "Frequency",
fill = "Diabetes Status"
) +
scale_fill_manual(
values = c("red", "blue", "green"),
labels = c("No Diabetes", "Pre-Diabetes", "Diabetes")
) +
theme_bw() +
theme(
plot.title = element_text(size = 16, face = "bold", hjust = 0.5),
axis.title = element_text(size = 14),
axis.text = element_text(size = 12),
legend.title = element_text(size = 14),
legend.text = element_text(size = 12)
)
Cholesterol không cao (0): - Phần lớn thuộc nhóm Không tiểu đường (132,673). - Nhóm Tiền tiểu đường (1,756) và Tiểu đường (11,660) thấp hơn nhiều.
Cholesterol cao (1): - Không tiểu đường vẫn chiếm đa số (81,030). - Số ca Tiền tiểu đường (2,875) và Tiểu đường (23,686) tăng đáng kể so với cholesterol không cao.
Nhận xét: Cholesterol cao có liên quan đến tần suất cao hơn của trạng thái Tiểu đường so với cholesterol bình thường.
# Tạo tần suất của các nhóm
freq_data <- as.data.frame(table(data$chol_check, data$diabetes_012))
colnames(freq_data) <- c("chol_check", "diabetes_012", "frequency")
# Chuyển đổi cột thành kiểu số
freq_data$chol_check <- as.factor(freq_data$chol_check)
freq_data$diabetes_012 <- as.factor(freq_data$diabetes_012)
# Vẽ biểu đồ
ggplot(freq_data, aes(x = chol_check, y = frequency, fill = diabetes_012)) +
geom_bar(stat = "identity", position = "dodge", width = 0.7) +
geom_text(aes(label = frequency),
position = position_dodge(width = 0.7),
vjust = -0.5,
size = 3) +
labs(
title = "Diabetes Frequency by Cholesterol Check Status",
x = "Cholesterol Check",
y = "Frequency",
fill = "Diabetes Status"
) +
scale_fill_manual(
values = c("red", "blue", "green"),
labels = c("No Diabetes", "Pre-Diabetes", "Diabetes")
) +
theme_bw() +
theme(
plot.title = element_text(size = 16, face = "bold", hjust = 0.5),
axis.title = element_text(size = 14),
axis.text = element_text(size = 12),
legend.title = element_text(size = 14),
legend.text = element_text(size = 12)
)
Không kiểm tra cholesterol (0): - Nhóm Không tiểu đường chiếm 9,167. - Nhóm Tiền tiểu đường (62) và Tiểu đường (241) rất ít.
Kiểm tra cholesterol (1): - Không tiểu đường chiếm đa số (204,536). - Nhóm Tiền tiểu đường (4,569) và Tiểu đường (35,105) tăng rõ rệt so với không kiểm tra.
Nhận xét: Việc kiểm tra cholesterol có liên quan đến số lượng cao hơn các trường hợp Tiền tiểu đường và Tiểu đường, cho thấy tầm quan trọng của việc kiểm tra sức khỏe.
# Tạo tần suất của các nhóm
freq_data <- as.data.frame(table(data$smoker, data$diabetes_012))
colnames(freq_data) <- c("smoker", "diabetes_012", "frequency")
# Chuyển đổi cột thành kiểu số
freq_data$smoker <- as.factor(freq_data$smoker)
freq_data$diabetes_012 <- as.factor(freq_data$diabetes_012)
# Vẽ biểu đồ
ggplot(freq_data, aes(x = smoker, y = frequency, fill = diabetes_012)) +
geom_bar(stat = "identity", position = "dodge", width = 0.7) +
geom_text(aes(label = frequency),
position = position_dodge(width = 0.7),
vjust = -0.5,
size = 3) +
labs(
title = "Diabetes Frequency by Smoking Status",
x = "Smoking Status",
y = "Frequency",
fill = "Diabetes Status"
) +
scale_fill_manual(
values = c("red", "blue", "green"),
labels = c("No Diabetes", "Pre-Diabetes", "Diabetes")
) +
theme_bw() +
theme(
plot.title = element_text(size = 16, face = "bold", hjust = 0.5),
axis.title = element_text(size = 14),
axis.text = element_text(size = 12),
legend.title = element_text(size = 14),
legend.text = element_text(size = 12)
)
Không hút thuốc (0): - Nhóm Không tiểu đường chiếm 121,879. - Nhóm Tiền tiểu đường (2,349) và Tiểu đường (17,029) thấp hơn.
Hút thuốc (1): - Nhóm Không tiểu đường chiếm đa số (91,824). - Nhóm Tiền tiểu đường (2,282) và Tiểu đường (18,317) tăng nhẹ so với không hút thuốc.
Nhận xét: Hút thuốc có liên quan đến tần suất cao hơn của trạng thái Tiểu đường, tuy nhiên, số lượng người Không tiểu đường vẫn chiếm ưu thế trong cả hai nhóm.
# Tạo tần suất của các nhóm
freq_data <- as.data.frame(table(data$stroke, data$diabetes_012))
colnames(freq_data) <- c("stroke", "diabetes_012", "frequency")
# Chuyển đổi cột thành kiểu số
freq_data$stroke <- as.factor(freq_data$stroke)
freq_data$diabetes_012 <- as.factor(freq_data$diabetes_012)
# Vẽ biểu đồ
ggplot(freq_data, aes(x = stroke, y = frequency, fill = diabetes_012)) +
geom_bar(stat = "identity", position = "dodge", width = 0.7) +
geom_text(aes(label = frequency),
position = position_dodge(width = 0.7),
vjust = -0.5,
size = 3) +
labs(
title = "Diabetes Frequency by Stroke Status",
x = "Stroke Status",
y = "Frequency",
fill = "Diabetes Status"
) +
scale_fill_manual(
values = c("red", "blue", "green"),
labels = c("No Diabetes", "Pre-Diabetes", "Diabetes")
) +
theme_bw() +
theme(
plot.title = element_text(size = 16, face = "bold", hjust = 0.5),
axis.title = element_text(size = 14),
axis.text = element_text(size = 12),
legend.title = element_text(size = 14),
legend.text = element_text(size = 12)
)
Không bị đột quỵ (0): - Nhóm Không tiểu đường chiếm 206,944. - Nhóm Tiền tiểu đường (4,366) và Tiểu đường (32,078) thấp hơn nhưng vẫn đáng kể.
Có bị đột quỵ (1): - Nhóm Không tiểu đường giảm xuống còn 6,759. - Nhóm Tiền tiểu đường (265) và Tiểu đường (3,268) cũng có xu hướng giảm nhưng tỷ lệ Tiểu đường vẫn cao hơn Tiền tiểu đường.
Nhận xét: Tình trạng đột quỵ có liên quan đến sự gia tăng tỷ lệ Tiểu đường, đặc biệt ở nhóm đã từng bị đột quỵ.
# Tạo tần suất của các nhóm
freq_data <- as.data.frame(table(data$heart_diseaseor_attack, data$diabetes_012))
colnames(freq_data) <- c("heart_diseaseor_attack", "diabetes_012", "frequency")
# Chuyển đổi cột thành kiểu số
freq_data$heart_diseaseor_attack <- as.factor(freq_data$heart_diseaseor_attack)
freq_data$diabetes_012 <- as.factor(freq_data$diabetes_012)
# Vẽ biểu đồ
ggplot(freq_data, aes(x = heart_diseaseor_attack, y = frequency, fill = diabetes_012)) +
geom_bar(stat = "identity", position = "dodge", width = 0.7) +
geom_text(aes(label = frequency),
position = position_dodge(width = 0.7),
vjust = -0.5,
size = 3) +
labs(
title = "Diabetes Frequency by Heart Disease or Attack Status",
x = "Heart Disease or Attack Status",
y = "Frequency",
fill = "Diabetes Status"
) +
scale_fill_manual(
values = c("red", "blue", "green"),
labels = c("No Diabetes", "Pre-Diabetes", "Diabetes")
) +
theme_bw() +
theme(
plot.title = element_text(size = 16, face = "bold", hjust = 0.5),
axis.title = element_text(size = 14),
axis.text = element_text(size = 12),
legend.title = element_text(size = 14),
legend.text = element_text(size = 12)
)
Không có bệnh tim hoặc đau tim (0): - Nhóm Không tiểu đường chiếm 198,352. - Nhóm Tiền tiểu đường (3,967) và Tiểu đường (27,468) thấp hơn đáng kể.
Có bệnh tim hoặc đau tim (1): - Nhóm Không tiểu đường giảm xuống còn 15,351. - Nhóm Tiền tiểu đường (664) và Tiểu đường (7,878) tăng tỷ lệ đáng kể so với nhóm không có bệnh.
Nhận xét: Tình trạng bệnh tim hoặc đau tim có liên quan đến sự gia tăng tỷ lệ mắc Tiểu đường, đặc biệt ở nhóm đã từng có tiền sử bệnh tim hoặc đau tim.
# Tạo tần suất của các nhóm
freq_data <- as.data.frame(table(data$phys_activity, data$diabetes_012))
colnames(freq_data) <- c("phys_activity", "diabetes_012", "frequency")
# Chuyển đổi cột thành kiểu số
freq_data$phys_activity <- as.factor(freq_data$phys_activity)
freq_data$diabetes_012 <- as.factor(freq_data$diabetes_012)
# Vẽ biểu đồ
ggplot(freq_data, aes(x = phys_activity, y = frequency, fill = diabetes_012)) +
geom_bar(stat = "identity", position = "dodge", width = 0.7) +
geom_text(aes(label = frequency),
position = position_dodge(width = 0.7),
vjust = -0.5,
size = 3) +
labs(
title = "Diabetes Frequency by Physical Activity Status",
x = "Physical Activity Status",
y = "Frequency",
fill = "Diabetes Status"
) +
scale_fill_manual(
values = c("red", "blue", "green"),
labels = c("No Diabetes", "Pre-Diabetes", "Diabetes")
) +
theme_bw() +
theme(
plot.title = element_text(size = 16, face = "bold", hjust = 0.5),
axis.title = element_text(size = 14),
axis.text = element_text(size = 12),
legend.title = element_text(size = 14),
legend.text = element_text(size = 12)
)
Không hoạt động thể chất (0): - Nhóm Không tiểu đường chiếm 47,212. - Nhóm Tiền tiểu đường (1,489) và Tiểu đường (13,059) thấp hơn nhưng đáng kể.
Có hoạt động thể chất (1): - Nhóm Không tiểu đường tăng lên 166,491. - Nhóm Tiền tiểu đường (3,142) và Tiểu đường (22,287) cũng tăng so với nhóm không hoạt động thể chất.
Nhận xét: Hoạt động thể chất có liên quan đến sự gia tăng tỷ lệ Tiểu đường, tuy nhiên nhóm có hoạt động thể chất cũng có tỷ lệ Không tiểu đường cao hơn hẳn, cho thấy lợi ích của việc tập luyện.
# Tạo tần suất của các nhóm
freq_data <- as.data.frame(table(data$fruits, data$diabetes_012))
colnames(freq_data) <- c("fruits", "diabetes_012", "frequency")
# Chuyển đổi cột thành kiểu số
freq_data$fruits <- as.factor(freq_data$fruits)
freq_data$diabetes_012 <- as.factor(freq_data$diabetes_012)
# Vẽ biểu đồ
ggplot(freq_data, aes(x = fruits, y = frequency, fill = diabetes_012)) +
geom_bar(stat = "identity", position = "dodge", width = 0.7) +
geom_text(aes(label = frequency),
position = position_dodge(width = 0.7),
vjust = -0.5,
size = 3) +
labs(
title = "Diabetes Frequency by Fruits Consumption",
x = "Fruits Consumption",
y = "Frequency",
fill = "Diabetes Status"
) +
scale_fill_manual(
values = c("red", "blue", "green"),
labels = c("No Diabetes", "Pre-Diabetes", "Diabetes")
) +
theme_bw() +
theme(
plot.title = element_text(size = 16, face = "bold", hjust = 0.5),
axis.title = element_text(size = 14),
axis.text = element_text(size = 12),
legend.title = element_text(size = 14),
legend.text = element_text(size = 12)
)
Không tiêu thụ trái cây (0): - Nhóm Không tiểu đường chiếm 76,287. - Nhóm Tiền tiểu đường (1,842) và Tiểu đường (14,653) thấp hơn đáng kể.
Có tiêu thụ trái cây (1): - Nhóm Không tiểu đường tăng lên 137,416. - Nhóm Tiền tiểu đường (2,789) và Tiểu đường (20,693) cũng tăng so với nhóm không tiêu thụ trái cây.
Nhận xét: Việc tiêu thụ trái cây có liên quan đến sự gia tăng tỷ lệ Tiểu đường, nhưng đồng thời cũng cho thấy tỷ lệ Không tiểu đường cao hơn, phản ánh lợi ích sức khỏe của trái cây.
# Tạo tần suất của các nhóm
freq_data <- as.data.frame(table(data$veggies, data$diabetes_012))
colnames(freq_data) <- c("veggies", "diabetes_012", "frequency")
# Chuyển đổi cột thành kiểu số
freq_data$veggies <- as.factor(freq_data$veggies)
freq_data$diabetes_012 <- as.factor(freq_data$diabetes_012)
# Vẽ biểu đồ
ggplot(freq_data, aes(x = veggies, y = frequency, fill = diabetes_012)) +
geom_bar(stat = "identity", position = "dodge", width = 0.7) +
geom_text(aes(label = frequency),
position = position_dodge(width = 0.7),
vjust = -0.5,
size = 3) +
labs(
title = "Diabetes Frequency by Vegetables Consumption",
x = "Vegetables Consumption",
y = "Frequency",
fill = "Diabetes Status"
) +
scale_fill_manual(
values = c("red", "blue", "green"),
labels = c("No Diabetes", "Pre-Diabetes", "Diabetes")
) +
theme_bw() +
theme(
plot.title = element_text(size = 16, face = "bold", hjust = 0.5),
axis.title = element_text(size = 14),
axis.text = element_text(size = 12),
legend.title = element_text(size = 14),
legend.text = element_text(size = 12)
)
Không tiêu thụ rau xanh (0): - Nhóm Không tiểu đường chiếm 38,159. - Nhóm Tiền tiểu đường (1,070) và Tiểu đường (8,610) thấp hơn đáng kể.
Có tiêu thụ rau xanh (1): - Nhóm Không tiểu đường tăng lên 175,544. - Nhóm Tiền tiểu đường (3,561) và Tiểu đường (26,736) cũng tăng rõ rệt so với nhóm không tiêu thụ rau xanh.
Nhận xét: Tiêu thụ rau xanh có liên quan đến sự gia tăng tỷ lệ Không tiểu đường, phản ánh lợi ích sức khỏe của rau xanh trong việc giảm nguy cơ mắc bệnh tiểu đường.
# Tạo tần suất của các nhóm
freq_data <- as.data.frame(table(data$hvy_alcohol_consump, data$diabetes_012))
colnames(freq_data) <- c("hvy_alcohol_consump", "diabetes_012", "frequency")
# Chuyển đổi cột thành kiểu số
freq_data$hvy_alcohol_consump <- as.factor(freq_data$hvy_alcohol_consump)
freq_data$diabetes_012 <- as.factor(freq_data$diabetes_012)
# Vẽ biểu đồ
ggplot(freq_data, aes(x = hvy_alcohol_consump, y = frequency, fill = diabetes_012)) +
geom_bar(stat = "identity", position = "dodge", width = 0.7) +
geom_text(aes(label = frequency),
position = position_dodge(width = 0.7),
vjust = -0.5,
size = 3) +
labs(
title = "Diabetes Frequency by Heavy Alcohol Consumption",
x = "Heavy Alcohol Consumption",
y = "Frequency",
fill = "Diabetes Status"
) +
scale_fill_manual(
values = c("red", "blue", "green"),
labels = c("No Diabetes", "Pre-Diabetes", "Diabetes")
) +
theme_bw() +
theme(
plot.title = element_text(size = 16, face = "bold", hjust = 0.5),
axis.title = element_text(size = 14),
axis.text = element_text(size = 12),
legend.title = element_text(size = 14),
legend.text = element_text(size = 12)
)
Không tiêu thụ rượu nặng (0): - Nhóm Không tiểu đường chiếm 200,487. - Nhóm Tiền tiểu đường (4,423) và Tiểu đường (34,514) cao hơn đáng kể.
Có tiêu thụ rượu nặng (1): - Nhóm Không tiểu đường giảm xuống còn 13,216. - Nhóm Tiền tiểu đường (208) và Tiểu đường (832) rất thấp.
Nhận xét: Tiêu thụ rượu nặng có liên quan đến tỷ lệ thấp hơn ở cả ba trạng thái, nhưng sự giảm này có thể liên quan đến số lượng người tiêu thụ rượu nặng ít hơn trong tổng số mẫu.
# Tạo tần suất của các nhóm
freq_data <- as.data.frame(table(data$any_healthcare, data$diabetes_012))
colnames(freq_data) <- c("any_healthcare", "diabetes_012", "frequency")
# Chuyển đổi cột thành kiểu số
freq_data$any_healthcare <- as.factor(freq_data$any_healthcare)
freq_data$diabetes_012 <- as.factor(freq_data$diabetes_012)
# Vẽ biểu đồ
ggplot(freq_data, aes(x = any_healthcare, y = frequency, fill = diabetes_012)) +
geom_bar(stat = "identity", position = "dodge", width = 0.7) +
geom_text(aes(label = frequency),
position = position_dodge(width = 0.7),
vjust = -0.5,
size = 3) +
labs(
title = "Diabetes Frequency by Any Healthcare Status",
x = "Any Healthcare",
y = "Frequency",
fill = "Diabetes Status"
) +
scale_fill_manual(
values = c("red", "blue", "green"),
labels = c("No Diabetes", "Pre-Diabetes", "Diabetes")
) +
theme_bw() +
theme(
plot.title = element_text(size = 16, face = "bold", hjust = 0.5),
axis.title = element_text(size = 14),
axis.text = element_text(size = 12),
legend.title = element_text(size = 14),
legend.text = element_text(size = 12)
)
Không tiếp cận dịch vụ chăm sóc sức khỏe (0): - Nhóm Không tiểu đường chiếm 10,741. - Nhóm Tiền tiểu đường (254) và Tiểu đường (1,422) thấp hơn nhiều.
Có tiếp cận dịch vụ chăm sóc sức khỏe (1): - Nhóm Không tiểu đường tăng mạnh lên 202,962. - Nhóm Tiền tiểu đường (4,377) và Tiểu đường (33,924) cũng tăng đáng kể.
Nhận xét: Việc tiếp cận dịch vụ chăm sóc sức khỏe có liên quan đến sự gia tăng tỷ lệ Không tiểu đường và Tiểu đường, cho thấy tầm quan trọng của dịch vụ y tế trong việc phát hiện và quản lý bệnh tiểu đường.
# Tạo tần suất của các nhóm
freq_data <- as.data.frame(table(data$no_docbc_cost, data$diabetes_012))
colnames(freq_data) <- c("no_docbc_cost", "diabetes_012", "frequency")
# Chuyển đổi cột thành kiểu số
freq_data$no_docbc_cost <- as.factor(freq_data$no_docbc_cost)
freq_data$diabetes_012 <- as.factor(freq_data$diabetes_012)
# Vẽ biểu đồ
ggplot(freq_data, aes(x = no_docbc_cost, y = frequency, fill = diabetes_012)) +
geom_bar(stat = "identity", position = "dodge", width = 0.7) +
geom_text(aes(label = frequency),
position = position_dodge(width = 0.7),
vjust = -0.5,
size = 3) +
labs(
title = "Diabetes Frequency by No Doctor Because of Cost Status",
x = "No Doctor Because of Cost",
y = "Frequency",
fill = "Diabetes Status"
) +
scale_fill_manual(
values = c("red", "blue", "green"),
labels = c("No Diabetes", "Pre-Diabetes", "Diabetes")
) +
theme_bw() +
theme(
plot.title = element_text(size = 16, face = "bold", hjust = 0.5),
axis.title = element_text(size = 14),
axis.text = element_text(size = 12),
legend.title = element_text(size = 14),
legend.text = element_text(size = 12)
)
Không bị hạn chế vì chi phí (0): - Nhóm Không tiểu đường chiếm 196,690. - Nhóm Tiền tiểu đường (4,032) và Tiểu đường (31,604) cao hơn đáng kể.
Bị hạn chế vì chi phí (1): - Nhóm Không tiểu đường giảm xuống còn 17,013. - Nhóm Tiền tiểu đường (599) và Tiểu đường (3,742) cũng giảm đáng kể.
Nhận xét: Chi phí cản trở việc đến bác sĩ có liên quan đến tỷ lệ Không tiểu đường và Tiểu đường thấp hơn, cho thấy rằng việc tiếp cận bác sĩ bị giới hạn bởi chi phí có thể làm giảm khả năng phát hiện và quản lý bệnh tiểu đường.
# Tạo tần suất của các nhóm
freq_data <- as.data.frame(table(data$gen_hlth, data$diabetes_012))
colnames(freq_data) <- c("gen_hlth", "diabetes_012", "frequency")
# Chuyển đổi cột thành kiểu số
freq_data$gen_hlth <- as.factor(freq_data$gen_hlth)
freq_data$diabetes_012 <- as.factor(freq_data$diabetes_012)
# Vẽ biểu đồ
ggplot(freq_data, aes(x = gen_hlth, y = frequency, fill = diabetes_012)) +
geom_bar(stat = "identity", position = "dodge", width = 0.7) +
geom_text(aes(label = frequency),
position = position_dodge(width = 0.7),
vjust = -0.5,
size = 3) +
labs(
title = "Diabetes Frequency by General Health Status",
x = "General Health Status",
y = "Frequency",
fill = "Diabetes Status"
) +
scale_fill_manual(
values = c("red", "blue", "green"),
labels = c("No Diabetes", "Pre-Diabetes", "Diabetes")
) +
theme_bw() +
theme(
plot.title = element_text(size = 16, face = "bold", hjust = 0.5),
axis.title = element_text(size = 14),
axis.text = element_text(size = 12),
legend.title = element_text(size = 14),
legend.text = element_text(size = 12)
)
Tình trạng sức khỏe tốt hơn (1 - 2): - Mức 1: Nhóm Không tiểu đường chiếm 43,846, trong khi Tiền tiểu đường (313) và Tiểu đường (140) rất thấp. - Mức 2: Nhóm Không tiểu đường chiếm 81,489, cao nhất trong tất cả các mức. Nhóm Tiền tiểu đường (1,214) và Tiểu đường (6,381) tăng hơn so với mức 1.
Tình trạng sức khỏe trung bình (3): - Nhóm Không tiểu đường giảm xuống 60,461, trong khi nhóm Tiền tiểu đường (1,728) và Tiểu đường (13,457) tăng đáng kể.
Tình trạng sức khỏe kém hơn (4 - 5): - Mức 4: Nhóm Không tiểu đường giảm còn 20,755, nhóm Tiền tiểu đường (1,025) và Tiểu đường (9,790) tiếp tục tăng. - Mức 5: Nhóm Không tiểu đường giảm thấp nhất, chỉ còn 7,152, trong khi nhóm Tiền tiểu đường (351) và Tiểu đường (4,578) vẫn hiện diện đáng kể.
Nhận xét: Tình trạng sức khỏe tổng quát kém hơn có liên quan đến tỷ lệ Tiểu đường cao hơn, trong khi nhóm có sức khỏe tốt chủ yếu thuộc nhóm Không tiểu đường, nhấn mạnh mối quan hệ giữa sức khỏe tổng thể và nguy cơ mắc bệnh tiểu đường.
# Tạo tần suất của các nhóm
freq_data <- as.data.frame(table(data$diff_walk, data$diabetes_012))
colnames(freq_data) <- c("diff_walk", "diabetes_012", "frequency")
# Chuyển đổi cột thành kiểu số
freq_data$diff_walk <- as.factor(freq_data$diff_walk)
freq_data$diabetes_012 <- as.factor(freq_data$diabetes_012)
# Vẽ biểu đồ
ggplot(freq_data, aes(x = diff_walk, y = frequency, fill = diabetes_012)) +
geom_bar(stat = "identity", position = "dodge", width = 0.7) +
geom_text(aes(label = frequency),
position = position_dodge(width = 0.7),
vjust = -0.5,
size = 3) +
labs(
title = "Diabetes Frequency by Difficulty Walking Status",
x = "Difficulty Walking",
y = "Frequency",
fill = "Diabetes Status"
) +
scale_fill_manual(
values = c("red", "blue", "green"),
labels = c("No Diabetes", "Pre-Diabetes", "Diabetes")
) +
theme_bw() +
theme(
plot.title = element_text(size = 16, face = "bold", hjust = 0.5),
axis.title = element_text(size = 14),
axis.text = element_text(size = 12),
legend.title = element_text(size = 14),
legend.text = element_text(size = 12)
)
Không gặp khó khăn khi đi lại (0): - Nhóm Không tiểu đường chiếm 185,434. - Nhóm Tiền tiểu đường (3,346) và Tiểu đường (22,225) thấp hơn nhiều so với nhóm không tiểu đường.
Có khó khăn khi đi lại (1): - Nhóm Không tiểu đường giảm xuống còn 28,269. - Nhóm Tiền tiểu đường (1,285) và Tiểu đường (13,121) tăng rõ rệt so với nhóm không gặp khó khăn.
Nhận xét: Khó khăn khi đi lại có liên quan đến tỷ lệ mắc Tiểu đường cao hơn, phản ánh tác động của các vấn đề vận động đối với nguy cơ mắc bệnh tiểu đường.
# Tạo tần suất của các nhóm
freq_data <- as.data.frame(table(data$sex, data$diabetes_012))
colnames(freq_data) <- c("sex", "diabetes_012", "frequency")
# Chuyển đổi cột thành kiểu số
freq_data$sex <- as.factor(freq_data$sex)
freq_data$diabetes_012 <- as.factor(freq_data$diabetes_012)
# Vẽ biểu đồ
ggplot(freq_data, aes(x = sex, y = frequency, fill = diabetes_012)) +
geom_bar(stat = "identity", position = "dodge", width = 0.7) +
geom_text(aes(label = frequency),
position = position_dodge(width = 0.7),
vjust = -0.5,
size = 3) +
labs(
title = "Diabetes Frequency by Sex",
x = "Sex",
y = "Frequency",
fill = "Diabetes Status"
) +
scale_fill_manual(
values = c("red", "blue", "green"),
labels = c("No Diabetes", "Pre-Diabetes", "Diabetes")
) +
theme_bw() +
theme(
plot.title = element_text(size = 16, face = "bold", hjust = 0.5),
axis.title = element_text(size = 14),
axis.text = element_text(size = 12),
legend.title = element_text(size = 14),
legend.text = element_text(size = 12)
)
Giới tính 0 (Nữ): - Nhóm Không tiểu đường chiếm 120,959. - Nhóm Tiền tiểu đường (2,604) và Tiểu đường (18,411) thấp hơn đáng kể.
Giới tính 1 (Nam): - Nhóm Không tiểu đường giảm xuống còn 92,744. - Nhóm Tiền tiểu đường (2,027) và Tiểu đường (16,935) cũng thấp hơn so với nhóm nữ.
Nhận xét: Nhóm nữ có tỷ lệ Không tiểu đường cao hơn so với nhóm nam, trong khi tỷ lệ Tiểu đường giữa hai giới tính tương đối gần nhau. Điều này cho thấy giới tính có thể ảnh hưởng đến nguy cơ mắc bệnh tiểu đường.
# Tạo tần suất của các nhóm
freq_data <- as.data.frame(table(data$age, data$diabetes_012))
colnames(freq_data) <- c("age", "diabetes_012", "frequency")
# Chuyển đổi cột thành kiểu số
freq_data$age <- as.factor(freq_data$age)
freq_data$diabetes_012 <- as.factor(freq_data$diabetes_012)
# Vẽ biểu đồ
ggplot(freq_data, aes(x = age, y = frequency, fill = diabetes_012)) +
geom_bar(stat = "identity", position = "dodge", width = 0.7) +
geom_text(aes(label = frequency),
position = position_dodge(width = 0.7),
vjust = -0.5,
size = 3) +
labs(
title = "Diabetes Frequency by Age",
x = "Age",
y = "Frequency",
fill = "Diabetes Status"
) +
scale_fill_manual(
values = c("red", "blue", "green"),
labels = c("No Diabetes", "Pre-Diabetes", "Diabetes")
) +
theme_bw() +
theme(
plot.title = element_text(size = 16, face = "bold", hjust = 0.5),
axis.title = element_text(size = 14),
axis.text = element_text(size = 12),
legend.title = element_text(size = 14),
legend.text = element_text(size = 12)
)
Nhận xét: Tần suất mắc bệnh tiểu đường (đặc biệt nhóm Không tiểu đường) đạt đỉnh ở nhóm tuổi trung niên (7 - 9 tuổi) và giảm dần sau đó. Nhóm Tiểu đường tăng dần theo độ tuổi, phản ánh nguy cơ tăng cao khi tuổi tăng.
# Tạo tần suất của các nhóm
freq_data <- as.data.frame(table(data$education, data$diabetes_012))
colnames(freq_data) <- c("education", "diabetes_012", "frequency")
# Chuyển đổi cột thành kiểu số
freq_data$education <- as.factor(freq_data$education)
freq_data$diabetes_012 <- as.factor(freq_data$diabetes_012)
# Vẽ biểu đồ
ggplot(freq_data, aes(x = education, y = frequency, fill = diabetes_012)) +
geom_bar(stat = "identity", position = "dodge", width = 0.7) +
geom_text(aes(label = frequency),
position = position_dodge(width = 0.7),
vjust = -0.5,
size = 3) +
labs(
title = "Diabetes Frequency by Education Level",
x = "Education Level",
y = "Frequency",
fill = "Diabetes Status"
) +
scale_fill_manual(
values = c("red", "blue", "green"),
labels = c("No Diabetes", "Pre-Diabetes", "Diabetes")
) +
theme_bw() +
theme(
plot.title = element_text(size = 16, face = "bold", hjust = 0.5),
axis.title = element_text(size = 14),
axis.text = element_text(size = 12),
legend.title = element_text(size = 14),
legend.text = element_text(size = 12)
)
Trình độ học vấn 1 - 3: - Mức 1: Nhóm Không tiểu đường rất thấp (125), và nhóm Tiểu đường chỉ là 47. - Mức 2: Nhóm Không tiểu đường tăng lên 2,699, và nhóm Tiểu đường tăng lên 1,183. - Mức 3: Nhóm Không tiểu đường là 6,868, và nhóm Tiểu đường đạt 2,296.
Trình độ học vấn 4 - 6: - Mức 4: Nhóm Không tiểu đường tăng mạnh lên 50,334, và nhóm Tiểu đường đạt 11,066. - Mức 5: Nhóm Không tiểu đường đạt 58,223, và nhóm Tiểu đường là 10,354. - Mức 6: Nhóm Không tiểu đường cao nhất ở mức 95,454, trong khi nhóm Tiểu đường đạt 10,400.
Nhận xét: Tần suất Không tiểu đường tăng mạnh theo trình độ học vấn, đặc biệt ở mức cao hơn (4 - 6). Tỷ lệ Tiểu đường cũng tăng lên ở các trình độ học vấn cao, nhưng không đáng kể so với nhóm Không tiểu đường, cho thấy mối liên hệ giữa trình độ học vấn và khả năng quản lý sức khỏe tốt hơn.
# Tạo tần suất của các nhóm
freq_data <- as.data.frame(table(data$income, data$diabetes_012))
colnames(freq_data) <- c("income", "diabetes_012", "frequency")
# Chuyển đổi cột thành kiểu số
freq_data$income <- as.factor(freq_data$income)
freq_data$diabetes_012 <- as.factor(freq_data$diabetes_012)
# Vẽ biểu đồ
ggplot(freq_data, aes(x = income, y = frequency, fill = diabetes_012)) +
geom_bar(stat = "identity", position = "dodge", width = 0.7) +
geom_text(aes(label = frequency),
position = position_dodge(width = 0.7),
vjust = -0.5,
size = 3) +
labs(
title = "Diabetes Frequency by Income Level",
x = "Income Level",
y = "Frequency",
fill = "Diabetes Status"
) +
scale_fill_manual(
values = c("red", "blue", "green"),
labels = c("No Diabetes", "Pre-Diabetes", "Diabetes")
) +
theme_bw() +
theme(
plot.title = element_text(size = 16, face = "bold", hjust = 0.5),
axis.title = element_text(size = 14),
axis.text = element_text(size = 12),
legend.title = element_text(size = 14),
legend.text = element_text(size = 12)
)
Mức thu nhập thấp (1 - 3): - Mức 1: Nhóm Không tiểu đường chiếm 7,114, trong khi Tiểu đường chỉ đạt 2,383. - Mức 2: Nhóm Không tiểu đường tăng lên 8,341, và nhóm Tiểu đường tăng lên 3,086. - Mức 3: Nhóm Không tiểu đường đạt 12,005, và nhóm Tiểu đường là 3,568.
Mức thu nhập trung bình (4 - 6): - Mức 4: Nhóm Không tiểu đường tăng lên 15,622, trong khi nhóm Tiểu đường là 4,054. - Mức 5: Nhóm Không tiểu đường đạt 20,792, và nhóm Tiểu đường là 4,504. - Mức 6: Nhóm Không tiểu đường tăng đáng kể lên 30,431, và nhóm Tiểu đường đạt 5,291.
Mức thu nhập cao (7 - 8): - Mức 7: Nhóm Không tiểu đường đạt 37,219, và nhóm Tiểu đường là 5,265. - Mức 8: Nhóm Không tiểu đường cao nhất, đạt 82,179, trong khi nhóm Tiểu đường là 7,195.
Nhận xét: Tần suất Không tiểu đường tăng mạnh theo mức thu nhập, đặc biệt ở các mức thu nhập cao (7 - 8). Tỷ lệ Tiểu đường cũng tăng lên nhưng với tốc độ chậm hơn, cho thấy mức thu nhập có thể ảnh hưởng tích cực đến khả năng quản lý sức khỏe và phòng ngừa bệnh tiểu đường.